/*
 * Joana Santos
 * santosjo24@gmail.com
 */
package vue;

import controlleur.ControleurDeJeu;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

/**
 * Vue du Menu du jeu. Il pourra à partir de ce menu commencer une nouvelle
 * partie, gérer son Deck, voir les règles du jeu ou encore quitter
 * l'applciation.
 *
 * @author Antoine Thorr, Joana Santos, Samy Rida, Vicky Ngo Pagbe
 */
public class Menu extends JFrame {

    private ControleurDeJeu cjeu;
    private JLayeredPane contenu;
    private JPanel Boutons;
    private JPanel Fond;
    private java.applet.AudioClip son;

    /**
     * Construit tout les composants necessaires à l'affichage du Menu
     *
     * @param cjeu
     * @throws IOException
     */
    public Menu(ControleurDeJeu cjeu) throws IOException {
        super();
        this.cjeu = cjeu;

        setTitle("Hackunamadata");
        setSize(1300, 700);
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setUndecorated(true);
        this.contenu = getLayeredPane();

        this.Fond = new JPanel();
        this.Boutons = new JPanel();

        ajoutBoutons();
        chargerImageDeFond();
        this.contenu.add(this.Fond, new Integer(1));
        this.contenu.add(this.Boutons, new Integer(2));
        setVisible(true);
        jouerSon();
    }

    /**
     * Ajoute les boutons définissant les actions du Menu.
     */
    private void ajoutBoutons() {
        GridLayout gl = new GridLayout(4, 0);
        gl.setVgap(20); // 20 pixels d'espace entre les lignes (V comme Vertical)
        this.Boutons.setLayout(gl);

        //Bouton Nouvelle partie
        JButton jouer = new JButton("Nouvelle Partie");
        jouer.setFont(new Font("Courier New", Font.BOLD, 30));
        jouer.setContentAreaFilled(false);
        jouer.setBorder(null);
        jouer.setForeground(Color.white);
        //Action du bouton nouvelle partie
        jouer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    Menu.this.setVisible(false);
                    Menu.this.son.stop();
                    Frame f = new Frame(Menu.this.cjeu);
                } catch (IOException ex) {
                    Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        });
        //Bouton Regle du jeu
        JButton regle = new JButton("Regle du jeu");
        regle.setFont(new Font("Courier New", Font.BOLD, 30));
        regle.setContentAreaFilled(false);
        regle.setBorder(null);
        regle.setForeground(Color.white);
        //Action du bouton Regle du jeu
        regle.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    Regle r = new Regle(Menu.this.cjeu);
                    Menu.this.son.stop();
                    Menu.this.dispose();

                } catch (IOException ex) {
                    Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        });
        //Bouton Gestion du deck
        JButton gestion = new JButton("Gestion du Deck");
        gestion.setFont(new Font("Courier New", Font.BOLD, 30));
        gestion.setContentAreaFilled(false);
        gestion.setBorder(null);
        gestion.setForeground(Color.white);

        //Bouton Quitter
        JButton quitter = new JButton("Quitter");
        quitter.setFont(new Font("Courier New", Font.BOLD, 30));
        quitter.setContentAreaFilled(false);
        quitter.setBorder(null);
        quitter.setForeground(Color.white);
        //Action du bouton Quitter
        quitter.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                Menu.this.dispose();
                System.exit(1);

            }
        });
        this.Boutons.add(jouer);
        this.Boutons.add(gestion);
        this.Boutons.add(regle);
        this.Boutons.add(quitter);
        this.Boutons.setOpaque(false);
        this.Boutons.setBounds(500, 300, 300, 300);
    }

    /**
     * Permet d'affecter l'image de fond du menu
     */
    private void chargerImageDeFond() {

        // On définit un objet de type ImageIcon contenant l'image de fond
        ImageIcon iconeFond = new ImageIcon("sprite/menu.gif");
        // On insert cette image dans un Jlabel
        JLabel labelImageFond = new JLabel(iconeFond);
        // getIconWidth et getIconHeight récupère la taille de notre ImageIcon
//        labelImageFond.setBounds(0, 0, iconeFond.getIconWidth(), iconeFond.getIconHeight());
        this.Fond.add(labelImageFond);
        this.Fond.setBounds(0, -5, iconeFond.getIconWidth(), iconeFond.getIconHeight());

    }

    /**
     * Permet de jouer un son lors du lancement du Menu
     */
    public void jouerSon() {
        java.net.URL url = Board.class.getResource("Musique/musique_menu.wav"); //Pas mieux avec un BufferedInputStream ?
        son = java.applet.Applet.newAudioClip(url);
        son.loop();
    }
}
